2.9 Zwei völlig überflüssige Beispiele
 
Manchmal sieht man es im Internet. Auf einer Dialogbox steht »Wenn Sie hier klicken, dann werden Sie befördert«. Kaum versuche ich, auf die Befehlsschaltfläche zu klicken, da ist sie schon auf der anderen Seite des Dialogs. Geht man mit der Maus dorthin, ist sie wieder zurückgesprungen. So kann man nie darauf klicken und wird nicht befördert.
Die Idee ist witzig. Das können Sie selbst basteln. Das Ereignis dazu heißt »MouseMove«.
Abbildung 2.26
Die Dialogbox mit der Befehlsschaltfläche
Das Ereignis »MouseMove« reagiert, wenn sich der Mauszeiger über der Schaltfläche befindet. Dann muss die Lage des Objekts verändert werden. Zwar kann die Lage mit der Eigenschaft Left abgefragt werden, aber leider ist sie schreibgeschützt, kann also nicht gesetzt werden. Deshalb muss man im Code nachsehen, welchen der Windows Form Designer generiert hat. Und dort findet sich die Lösung, die man dann wie folgt umsetzen kann:
Private Sub Button1_MouseMove(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button1.Click
If Me.Button1.Left = 8 Then
Me.Button1.Location = New System.Drawing.Point(360, 56)
End If
End Sub
Wie kommt man auf die Zahlen? Nun: die Position von links (8) findet sich in den Eigenschaften. Der Code Designer setzt den Button auf:
Me.Button1.Location = New System.Drawing.Point(8, 56)
Nun kann man ausprobieren, an welche linke Position der Button verschoben werden soll. Damit er wieder nach rechts hüpft, kann das Beispiel erweitert werden:
If Me.Button1.Left = 8 Then
Me.Button1.Location = New System.Drawing.Point(360, 56)
Else
Me.Button1.Location = New System.Drawing.Point(8, 56)
End If
Wenn er links sitzt, dann setze ihn nach rechts, sonst nach links.
Übrigens würde es auch mit zwei Command-Buttons funktionieren, die sich jeweils gegenseitig unsichtbar machen (visible = true und visible = false).
Abbildung 2.27
Der Mauszeiger schafft es nie, auf die Befehlsschaltfläche zu klicken.
Ein Doppelklick auf die »Userform« führt zu »Userform_Load«. Doch auch das Formular verfügt über eine Reihe Ereignisse. Dazu darf aus der Liste der Steuerelemente nicht »Userform« gewählt werden, sondern »Basisklassenereignisse«. Dann findet sich in der rechten Dropdown-Liste eine große Anzahl von Ereignissen, die sich auf das Formular beziehen. Damit könnte beispielsweise die Position des Mauszeigers abgefangen werden.
Das Systemargument e verfügt beim Ereignis MouseMove über die beiden Eigenschaften X und Y. Damit kann die aktuelle Mausposition bestimmt werden. Auf dem Formular sitzen zwei Labels, LabelX und LabelY, welche dynamisch wie folgt beschriftet werden:
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal _
e As System.Windows.Forms.MouseEventArgs) Handles _
MyMase.MouseMove
LabelX.Text = "X-Pos.: " & e.X.ToString
LabelY.Text = "Y-Pos.: " & e.Y.ToString
Abbildung 2.28
Die aktuelle Mausposition wird bestimmt.
Dies kann nun verwendet werden, um farblich zu kennzeichnen, dass sich der Cursor über einem Steuerelement befindet. Vielleicht fragen Sie nun, wer so etwas benötigt.
In Access 97 wird diese Eigenschaft in einigen Dialogblättern verwendet. Zum Beispiel: Eine Befehlsschaltfläche trägt einen schwarzen Text. Bewegt sich der Mauszeiger darüber, dann wird der Text weiß. Befindet sich der Mauszeiger wieder daneben, kehrt die ursprüngliche Farbe zurück. Andere - nicht Microsoft-Produkte - machen hiervon exzessiv Gebrauch. Zugegeben, manchmal ist es schon ein wenig verwirrend, wenn sich ständig der Text in der Titelzeile verändert beim Schieben des Mauszeigers.
Die beiden Farben werden über den Button an die beiden Ereignisse MouseMove und MouseLeave gebunden:
Private Sub Button4_MouseMove(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button4.Click
Me.Button4.ForeColor = System.Drawing.Color.White
End Sub
Private Sub Button4_MouseMove(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button4.Click
Me.Button4.ForeColor = System.Drawing.Color.Black
End Sub
Abbildung 2.29
MouseMove
Abbildung 2.30
MouseLeave
Natürlich könnte man das zweite Ereignis auch an die »Userform« an das Ereignis »MouseMove« binden. Dies hätte aber den Nachteil, dass das Ereignis permanent aufgerufen würde, was Rechnerkapazitäten kostet.
|